1e6 == 1 後面多 6個0 ... 一百萬
男性 或 女性
csv 讀入變數 states;再把 states 根據不同年齡層,展開變成人口 (搞出一個新的屬性叫做 population)| 村名 | 鄰數 | 戶數 | 男性 | 女性 | 合計 |
|---|---|---|---|---|---|
| 光平里 | 14 | 458 | 723 | 705 | 1428 |
| 村名 | 性別 | 人數 |
|---|---|---|
| 光平里 | 男 | 723 |
| 光平里 | 女 | 705 |
到這邊就可以分成兩種做法:
(1) 如果你不太會寫 JavaScript 的話,那就直接重新生成一個 csv 檔,把 25 筆資料,展開變成 50 筆資料。
(2) 王爺公叫我參加鐵人賽,還是要用 JavaScript 來處理資料的啦。
stateages = ages.flatMap(age => states.map(d => ({state: d.name, age, population: d[age]}))) // pivot longer
stateages = ages.flatMap(
age => states.map(
d => ({
state: d.name,
age,
population: d[age]
})
)) // pivot longer
d 原本就是傳進來 GroupedBarChart 的參數,我們的版本就是 states
d 就是傳進 GroupedBarChart 的參數,我們的版本就是 xihu_population
state 和 population
state 是 州名population 則是依照不同年齡層,填入該年齡層人口village_gender_population = ages.flatMap(
性別 => xihu_population.map(
d => ({
村里: d.村名,
性別,
人數: d[性別]
})
))
ages 是什麼咧?
village_gender_population = gender.flatMap(
性別 => xihu_population.map(
d => ({
村名: d.村名,
性別,
人數: d[性別]
})
))
village_gender_population = gender.flatMap( 性別 => xihu_population.map(d => ({village: d.村名, 性別, 人數: d[性別]})))
gen_chart = GroupedBarChart(village_gender_population, {
x: d => d.村名,
y: d => d.人數,
z: d => d.性別,
yLabel: "↑ 信徒上限",
yDomain: [0, 3000],
zDomain: gender,
colors: d3.schemeSpectral[gender.length],
width,
height: 500
})

d3 製圖有較好的彈性。